// 使用自定义的一个koa服务来代替nuxt自己的node服务,页面渲染等其他的不变
const Koa = require("koa");
const consola = require("consola");
const { Nuxt, Builder } = require("nuxt");
// Koa相关
const app = new Koa();
const { koaBody } = require("koa-body");
const { apiRegister } = require('./api/index')
// 设置nuxt 配置
const config = require("../nuxt.config.js");
config.dev = !(app.env === "production");

async function start() {
  const nuxt = new Nuxt(config);
  const {
    host = process.env.HOST || "127.0.0.1", // 默认值
    port = process.env.PORT || 3000,
  } = nuxt.options.server;

  // 开发环境使用Builder, 生产环境直接调用nuxt的ready
  if (config.dev) {
    const builder = new Builder(nuxt);
    await builder.build();
  } else {
    await nuxt.ready();
  }
   app.use(koaBody());

  // 注册Api方法
   apiRegister(app)
  // 监听所有路由
  app.use(async (ctx, next) => {
    if (/api\//.test(ctx.request.url)) { // 需要判断下请求路由中包含api的话就是返回数据作为api用，如果不是就走nuxt页面渲染
      await next()
    } else {
      ctx.status = 200;
      ctx.respond = false;
      ctx.req.ctx = ctx; // 用于nuxtServerInit或者nuxt-stash等场景，为了取到上下文，可不关注
      nuxt.render(ctx.req, ctx.res);
    }
  });

  // 注册路由
  // app.use(router.routes());
  // 解析post数据并注册路由
  

  app.listen(port, host);

  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true,
  });
}

start();
